package com.ruoyi.system.service;

import java.math.BigDecimal;
import java.util.List;

import com.ruoyi.common.annotation.Log;
import com.ruoyi.system.domain.SysContract;

/**
 * 合同Service接口
 *
 * @author ruoyi
 * @date 2025-06-16
 */
public interface ISysContractService
{
    /**
     * 查询合同
     *
     * @param id 合同主键
     * @return 合同
     */
    public SysContract selectSysContractById(Long id);

    /**
     * 查询此客户是否存在新签合同
     * @param customerId
     * @return
     */
    public SysContract selectNewSysContractByCustomerId(Long customerId);

    /**
     * 根据合同编号查询合同
     * @param contractCode
     * @return
     */
    public SysContract selectSysContractByContractCode(String contractCode);

    /**
     * 查询合同列表
     *
     * @param sysContract 合同
     * @return 合同集合
     */
    public List<SysContract> selectSysContractList(SysContract sysContract);

    /**
     * 修改班主任
     * @param sysContract
     * @return
     */
    public int updateTeacher(SysContract sysContract);

    /**
     * 新增合同
     *
     * @param sysContract 合同
     * @return 结果
     */
    public int insertSysContract(SysContract sysContract);

    /**
     * 构建合同
     * @param sysContract
     * @return
     */
    public SysContract buildSysContract(SysContract sysContract);

    /**
     * 新增合同判空方法
     * @param sysContract
     */
    public void emptyInsertSysContract(SysContract sysContract);

    /**
     * 修改合同剩余金额
     * @param sysContractId
     * @param money
     * @return
     */
    public BigDecimal updateSysContractRemainingMoney(Long sysContractId,BigDecimal money,Boolean isAdd);

    /**
     * 修改合同剩余课时
     * @param sysContractId
     * @param time
     * @param isAdd
     * @return
     */
    public Long updateSysContractRemainingClassTime(Long sysContractId,Long time,Boolean isAdd);

    /**
     * 修改合同金额
     * @param sysContractId
     * @param money
     * @param isAdd
     * @return
     */
    public BigDecimal updateSysContractMoney(Long sysContractId,BigDecimal money,Boolean isAdd);

    /**
     * 修改合同支付金额
     * @param sysContractId
     * @param money
     * @param isAdd
     * @return
     */
    public BigDecimal updateSysContractPayMoney(Long sysContractId,BigDecimal money,Boolean isAdd);

    /**
     * 修改合同
     *
     * @param sysContract 合同
     * @return 结果
     */
    public int updateSysContract(SysContract sysContract);

    /**
     * 批量删除合同
     *
     * @param ids 需要删除的合同主键集合
     * @return 结果
     */
    public int deleteSysContractByIds(Long[] ids);

    /**
     * 删除合同信息
     *
     * @param id 合同主键
     * @return 结果
     */
    public int deleteSysContractById(Long id);

    /**
     * 判断删除合同信息方法
     * @param id
     */
    public void emptyDeleteSysContract(Long id);

    /**
     * 出纳审核
     * @param sysContract
     * @return
     */
    public int cashierApply(SysContract sysContract);

    /**
     * 出纳取消审核
     * @param sysContract
     * @return
     */
    public int cashierUnApply(SysContract sysContract);

    /**
     * 校长审核
     * @param sysContract
     * @return
     */
    public int principalApprove(SysContract sysContract);

    /**
     * 校长取消审核
     * @param sysContract
     * @return
     */
    public int principalUnApprove(SysContract sysContract);

    /**
     * 提交方法
     * @param sysContract
     * @return
     */
    public int submit(SysContract sysContract);
}